package hash

import (
	"crypto/md5"
	"encoding/hex"
)

// Md5String 计算字符串的MD5哈希值并返回十六进制字符串。
//
// 参数:
//   - in: 输入字符串
//
// 返回值:
//   - string: 32字符的MD5哈希值(十六进制)
//
// 示例:
//
//	hash := Md5String("hello") // 返回 "5d41402abc4b2a76b9719d911017c592"
func Md5String(in string) string {
	return Md5Byte([]byte(in))
}

// Md5Byte 计算字节切片的MD5哈希值并返回十六进制字符串。
//
// 参数:
//   - in: 输入字节切片
//   - b: 可选的后缀字节(可省略)
//
// 返回值:
//   - string: 32字符的MD5哈希值(十六进制)
//
// 示例:
//
//	hash := Md5Byte([]byte("hello")) // 返回 "5d41402abc4b2a76b9719d911017c592"
//	hash := Md5Byte([]byte("hello"), '!') // 返回带后缀的哈希值
func Md5Byte(in []byte, b ...byte) string {
	h := md5.New()
	h.Write(in)
	return hex.EncodeToString(h.Sum(b))
}
